Q1

Use mpg data set from ggplot2 to create a static visualization and then use ggplotly() to create a limited interactive plot.

Hint: You will need to supply only frame. No ids used.


#Load and save dataframe
data(ggplot2::mpg)
q1.data <-as.data.frame(mpg)
q1.res <- ggplot(q1.data, 
             aes(x = cty, y = hwy,color=class)) +
  geom_point(aes(frame = class)) +
  theme_minimal() +
  theme(legend.position = "none") 
 

ggplotly(q1.res)

Q2

For this visualization you will use plot_ly() function. There is only one more function in the plot: layout(). This function allows you to set the title of the plot as well as axes titles. You will use it only for changing the titles and nothing else. To create this plot, we will use economics data set from ggplot2.

Hint: Download Plotly cheatsheet

#Load and save dataframe
data("economics")
q2.data <- as.data.frame(economics)

axis_template_x <-
  list(showgrid=T,
       zeroline=F,
       showline=F,
       dtick="M120",
       title="Date")

axis_template_y <-
  list(showgrid=T,
       zeroline=F,
       showline=F,
       dtick=2000,
       title="Unemployment in'000")

q2.data %>%
  plot_ly(x=~date,
          y=~unemploy,
          type = "scatter",
          mode="lines") %>%
  layout(
    xaxis=axis_template_x,
    yaxis=axis_template_y,
    title="Unemployment peaked after the financial crisis")
NA
NA

For the next three questions, you will use highcharter.

Q3

This example creates a heatmap similar to the one shown here.

Use mpg data and hchart() function. We want to create a heatmap of average highway mileage for different class and cyl. This plot removes all the observations with five cylinders or with 2seater class. Also note that I am treating cyl as a character (string) variable. This is essentially to create this plot.

#Load and save dataframe
q3.data <-q1.data %>% 
        filter(cyl !=5 & class != "2seater") %>%
        select(class, cyl,hwy) %>%
        group_by(class,cyl) %>%
        mutate(hwy=mean(hwy)) %>%
        distinct()
        
q3.data$cyl <- as.character(q3.data$cyl)
hchart(q3.data,"heatmap",hcaes(x=class,y=cyl,value=hwy)) %>%
  hc_yAxis(title=list(text="as.character,cyl"))
Error in hc_yAxis(., title = list(text = "as.character,cyl")) : 
  could not find function "hc_yAxis"

Q4

For this example, use a randomly selected subset of diamonds data set from ggplot2:

set.seed(2020)
q4.data <- diamonds[sample(nrow(diamonds), 1000),]

Next use d4.data to create the following plot.

I have used hc_theme_flat() for this plot. Please use this theme for your plot too! You can add a theme to the plot using hc_add_theme() function.

hchart(q4.data, "scatter", hcaes(x=carat,y=price,group=clarity)) %>%
  hc_add_theme(hc_theme_flat())  %>%
  hc_xAxis(title=list(text="Weigh of Diagmonds in Carats")) %>%
  hc_yAxis(title=list(text="price of Diamonds")) %>%
  hc_title(text="Variation in Diamnond Prices Increases with Carats")
  

Q5

Recreate the plot in Q2 using hchart(). I used hc_theme_chalk(). You can use any theme you want. You can check out the themes here.


hchart(q2.data,"line",hcaes(x=date,y=unemploy)) %>%
  hc_add_theme(hc_theme_chalk()) %>%
  hc_xAxis(title=list(text="Date")) %>%
  hc_yAxis(title=list(text="Unemployment in '000")) %>%
  hc_title(text="Unemployment peaked after the financial crisis")

Q6

Between plotly and highcharter, which package do you like more?

My answer: Of course, highcharter!


End of report

LS0tDQp0aXRsZTogIkRhdGEgVmlzdWFsaXphdGlvbiB3aXRoIGdncGxvdCINCmF1dGhvcjogIkFyYXNoIEhhdGFtaXJhZCwgYWhhdGFtaXJhZEBnbWFpbC5jb20iDQpkYXRlOiAiMjkgT2N0b2JlciAyMDIxIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIHRoZW1lOiBjb3Ntbw0KICBodG1sX2RvY3VtZW50Og0KICAgIGRmX3ByaW50OiBwYWdlZA0KZWRpdG9yX29wdGlvbnM6DQogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCg0KcGFjbWFuOjpwX2xvYWQocGxvdGx5LCB0aWR5dmVyc2UsIGdhcG1pbmRlciwgaGVyZSwgdmVtYmVkcikNCg0KIyBsaWJyYXJ5KGdncGxvdDIpDQojIGxpYnJhcnkobWFncml0dHIpDQojIGxpYnJhcnkoTUFTUykNCiMgbGlicmFyeShmQmFzaWNzKQ0KIyBsaWJyYXJ5KG1vbWVudHMpDQojIGxpYnJhcnkoZHBseXIpDQojIGxpYnJhcnkoaGF2ZW4pDQojIGxpYnJhcnkodGlkeXIpDQojbGlicmFyeShwbG90bHkpDQoNCmBgYA0KDQoNCg0KDQojIyBRMSANCg0KVXNlIGBtcGdgIGRhdGEgc2V0IGZyb20gYGdncGxvdDJgIHRvIGNyZWF0ZSBhIHN0YXRpYyB2aXN1YWxpemF0aW9uIGFuZCB0aGVuIHVzZSBgZ2dwbG90bHkoKWAgdG8gY3JlYXRlIGEgbGltaXRlZCBpbnRlcmFjdGl2ZSBwbG90Lg0KDQoqKkhpbnQqKjogWW91IHdpbGwgbmVlZCB0byBzdXBwbHkgb25seSBgZnJhbWVgLiBObyBgaWRzYCB1c2VkLg0KDQpgYGB7ciAgd2FybmluZz1GQUxTRX0NCg0KI0xvYWQgYW5kIHNhdmUgZGF0YWZyYW1lDQpkYXRhKGdncGxvdDI6Om1wZykNCnExLmRhdGEgPC1hcy5kYXRhLmZyYW1lKG1wZykNCg0KYGBgDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0UsICBmaWcud2lkdGg9OCAsIGZpZy5oZWlnaHQ9Nn0NCnExLnJlcyA8LSBnZ3Bsb3QocTEuZGF0YSwgDQogICAgICAgICAgICAgYWVzKHggPSBjdHksIHkgPSBod3ksY29sb3I9Y2xhc3MpKSArDQogIGdlb21fcG9pbnQoYWVzKGZyYW1lID0gY2xhc3MpKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgDQogDQoNCmdncGxvdGx5KHExLnJlcykNCmBgYA0KDQoNCg0KIyMgUTIgDQoNCkZvciB0aGlzIHZpc3VhbGl6YXRpb24geW91IHdpbGwgdXNlIGBwbG90X2x5KClgIGZ1bmN0aW9uLiBUaGVyZSBpcyBvbmx5IG9uZSBtb3JlIGZ1bmN0aW9uIGluIHRoZSBwbG90OiBgbGF5b3V0KClgLiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSB0aXRsZSBvZiB0aGUgcGxvdCBhcyB3ZWxsIGFzIGF4ZXMgdGl0bGVzLiBZb3Ugd2lsbCB1c2UgaXQgb25seSBmb3IgY2hhbmdpbmcgdGhlIHRpdGxlcyBhbmQgbm90aGluZyBlbHNlLiAgVG8gY3JlYXRlIHRoaXMgcGxvdCwgd2Ugd2lsbCB1c2UgYGVjb25vbWljc2AgZGF0YSBzZXQgZnJvbSBgZ2dwbG90MmAuDQoNCioqSGludDoqKiBbRG93bmxvYWQgUGxvdGx5IGNoZWF0c2hlZXRdKGh0dHBzOi8vaW1hZ2VzLnBsb3QubHkvcGxvdGx5LWRvY3VtZW50YXRpb24vaW1hZ2VzL3JfY2hlYXRfc2hlZXQucGRmKQ0KDQpgYGB7cn0NCiNMb2FkIGFuZCBzYXZlIGRhdGFmcmFtZQ0KZGF0YSgiZWNvbm9taWNzIikNCnEyLmRhdGEgPC0gYXMuZGF0YS5mcmFtZShlY29ub21pY3MpDQpgYGANCg0KYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZmlnLndpZHRoPTggLCBmaWcuaGVpZ2h0PTZ9DQoNCmF4aXNfdGVtcGxhdGVfeCA8LQ0KICBsaXN0KHNob3dncmlkPVQsDQogICAgICAgemVyb2xpbmU9RiwNCiAgICAgICBzaG93bGluZT1GLA0KICAgICAgIGR0aWNrPSJNMTIwIiwNCiAgICAgICB0aXRsZT0iRGF0ZSIpDQoNCmF4aXNfdGVtcGxhdGVfeSA8LQ0KICBsaXN0KHNob3dncmlkPVQsDQogICAgICAgemVyb2xpbmU9RiwNCiAgICAgICBzaG93bGluZT1GLA0KICAgICAgIGR0aWNrPTIwMDAsDQogICAgICAgdGl0bGU9IlVuZW1wbG95bWVudCBpbicwMDAiKQ0KDQpxMi5kYXRhICU+JQ0KICBwbG90X2x5KHg9fmRhdGUsDQogICAgICAgICAgeT1+dW5lbXBsb3ksDQogICAgICAgICAgdHlwZSA9ICJzY2F0dGVyIiwNCiAgICAgICAgICBtb2RlPSJsaW5lcyIpICU+JQ0KICBsYXlvdXQoDQogICAgeGF4aXM9YXhpc190ZW1wbGF0ZV94LA0KICAgIHlheGlzPWF4aXNfdGVtcGxhdGVfeSwNCiAgICB0aXRsZT0iVW5lbXBsb3ltZW50IHBlYWtlZCBhZnRlciB0aGUgZmluYW5jaWFsIGNyaXNpcyIpDQoNCg0KYGBgDQoNCg0KRm9yIHRoZSBuZXh0IHRocmVlIHF1ZXN0aW9ucywgeW91IHdpbGwgdXNlIFtgaGlnaGNoYXJ0ZXJgXShodHRwczovL2prdW5zdC5jb20vaGlnaGNoYXJ0ZXIvKS4gDQoNCiMjIFEzIA0KVGhpcyBleGFtcGxlIGNyZWF0ZXMgYSBoZWF0bWFwIHNpbWlsYXIgdG8gdGhlIG9uZSBbc2hvd24gaGVyZV0oaHR0cHM6Ly9qa3Vuc3QuY29tL2hpZ2hjaGFydGVyL2FydGljbGVzL2hpZ2hjaGFydGVyLmh0bWwpLg0KDQpVc2UgYG1wZ2AgZGF0YSBhbmQgYGhjaGFydCgpYCBmdW5jdGlvbi4gV2Ugd2FudCB0byBjcmVhdGUgYSBoZWF0bWFwIG9mIGF2ZXJhZ2UgaGlnaHdheSBtaWxlYWdlIGZvciBkaWZmZXJlbnQgYGNsYXNzYCBhbmQgYGN5bGAuIFRoaXMgcGxvdCByZW1vdmVzIGFsbCB0aGUgb2JzZXJ2YXRpb25zIHdpdGggZml2ZSBjeWxpbmRlcnMgb3Igd2l0aCBgMnNlYXRlcmAgY2xhc3MuIEFsc28gbm90ZSB0aGF0IEkgYW0gdHJlYXRpbmcgYGN5bGAgYXMgYSBjaGFyYWN0ZXIgKHN0cmluZykgdmFyaWFibGUuIFRoaXMgaXMgZXNzZW50aWFsbHkgdG8gY3JlYXRlIHRoaXMgcGxvdC4NCg0KYGBge3J9DQojTG9hZCBhbmQgc2F2ZSBkYXRhZnJhbWUNCnEzLmRhdGEgPC1xMS5kYXRhICU+JSANCiAgICAgICAgZmlsdGVyKGN5bCAhPTUgJiBjbGFzcyAhPSAiMnNlYXRlciIpICU+JQ0KICAgICAgICBzZWxlY3QoY2xhc3MsIGN5bCxod3kpICU+JQ0KICAgICAgICBncm91cF9ieShjbGFzcyxjeWwpICU+JQ0KICAgICAgICBtdXRhdGUoaHd5PW1lYW4oaHd5KSkgJT4lDQogICAgICAgIGRpc3RpbmN0KCkNCiAgICAgICAgDQpxMy5kYXRhJGN5bCA8LSBhcy5jaGFyYWN0ZXIocTMuZGF0YSRjeWwpDQoNCg0KYGBgDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGZpZy53aWR0aD04ICwgZmlnLmhlaWdodD02fQ0KaGNoYXJ0KHEzLmRhdGEsImhlYXRtYXAiLGhjYWVzKHg9Y2xhc3MseT1jeWwsdmFsdWU9aHd5KSkgJT4lDQogIGhjX3lBeGlzKHRpdGxlPWxpc3QodGV4dD0iYXMuY2hhcmFjdGVyLGN5bCIpKQ0KDQpgYGANCg0KDQojIyBRNCANCg0KRm9yIHRoaXMgZXhhbXBsZSwgdXNlIGEgcmFuZG9tbHkgc2VsZWN0ZWQgc3Vic2V0IG9mIGBkaWFtb25kc2AgZGF0YSBzZXQgZnJvbSBgZ2dwbG90MmA6DQoNCmBgYHtyIGVjaG89VFJVRX0NCnNldC5zZWVkKDIwMjApDQpxNC5kYXRhIDwtIGRpYW1vbmRzW3NhbXBsZShucm93KGRpYW1vbmRzKSwgMTAwMCksXQ0KYGBgDQoNCk5leHQgdXNlIGBkNC5kYXRhYCB0byBjcmVhdGUgdGhlIGZvbGxvd2luZyBwbG90LiANCg0KSSBoYXZlIHVzZWQgYGhjX3RoZW1lX2ZsYXQoKWAgZm9yIHRoaXMgcGxvdC4gKipQbGVhc2UgdXNlIHRoaXMgdGhlbWUgZm9yIHlvdXIgcGxvdCB0b28hKioNCllvdSBjYW4gYWRkIGEgdGhlbWUgdG8gdGhlIHBsb3QgdXNpbmcgYGhjX2FkZF90aGVtZSgpYCBmdW5jdGlvbi4NCg0KYGBge3Igd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZmlnLndpZHRoPTggLCBmaWcuaGVpZ2h0PTZ9DQpoY2hhcnQocTQuZGF0YSwgInNjYXR0ZXIiLCBoY2Flcyh4PWNhcmF0LHk9cHJpY2UsZ3JvdXA9Y2xhcml0eSkpICU+JQ0KICBoY19hZGRfdGhlbWUoaGNfdGhlbWVfZmxhdCgpKSAgJT4lDQogIGhjX3hBeGlzKHRpdGxlPWxpc3QodGV4dD0iV2VpZ2ggb2YgRGlhZ21vbmRzIGluIENhcmF0cyIpKSAlPiUNCiAgaGNfeUF4aXModGl0bGU9bGlzdCh0ZXh0PSJwcmljZSBvZiBEaWFtb25kcyIpKSAlPiUNCiAgaGNfdGl0bGUodGV4dD0iVmFyaWF0aW9uIGluIERpYW1ub25kIFByaWNlcyBJbmNyZWFzZXMgd2l0aCBDYXJhdHMiKQ0KICANCmBgYA0KDQoNCg0KDQojIyBRNSANCg0KUmVjcmVhdGUgdGhlIHBsb3QgaW4gUTIgdXNpbmcgYGhjaGFydCgpYC4gSSB1c2VkIGBoY190aGVtZV9jaGFsaygpYC4gWW91IGNhbiB1c2UgYW55IHRoZW1lIHlvdSB3YW50LiBZb3UgY2FuIGNoZWNrIG91dCB0aGUgdGhlbWVzIFtoZXJlXShodHRwczovL2prdW5zdC5jb20vaGlnaGNoYXJ0ZXIvYXJ0aWNsZXMvdGhlbWVzLmh0bWwpLg0KDQpgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBmaWcud2lkdGg9OCAsIGZpZy5oZWlnaHQ9Nn0NCg0KaGNoYXJ0KHEyLmRhdGEsImxpbmUiLGhjYWVzKHg9ZGF0ZSx5PXVuZW1wbG95KSkgJT4lDQogIGhjX2FkZF90aGVtZShoY190aGVtZV9jaGFsaygpKSAlPiUNCiAgaGNfeEF4aXModGl0bGU9bGlzdCh0ZXh0PSJEYXRlIikpICU+JQ0KICBoY195QXhpcyh0aXRsZT1saXN0KHRleHQ9IlVuZW1wbG95bWVudCBpbiAnMDAwIikpICU+JQ0KICBoY190aXRsZSh0ZXh0PSJVbmVtcGxveW1lbnQgcGVha2VkIGFmdGVyIHRoZSBmaW5hbmNpYWwgY3Jpc2lzIikNCg0KYGBgDQoNCiMjIFE2IA0KDQpCZXR3ZWVuIGBwbG90bHlgIGFuZCBgaGlnaGNoYXJ0ZXJgLCB3aGljaCBwYWNrYWdlIGRvIHlvdSBsaWtlIG1vcmU/IA0KDQoNCioqTXkgYW5zd2VyOioqICBPZiBjb3Vyc2UsIGhpZ2hjaGFydGVyISANCg0KDQoNCg0KKioqICAgDQoNCiMjIyMgRW5kIG9mIHJlcG9ydCAgDQo=